package com.tedu.day02.oop;

/**
 * 抽象类：抽象类与抽象方法   关键字：abstract
 * 类：只能提供行为概念，没有具体实现行为
 *
 * 抽象类与面型对象--多态绝对关系【向上造型创建对象】
 * 使用多态创建抽象类，抽象类本很无法创建对象，需要使用多态完成抽象创建
 *
 * 什么是使用抽象类？
 * 复杂项目时，需要在不同类下实现不同的功能，首先抽象类【Android常用】
 *
 * 定义抽象类的方法？
 * 抽象类：修饰符   abstract  class  类名{} ----毫无意义
 * 抽象方法：  修饰符 abstract 返回值   方法(参数);  ---没有具体的实现
 *
 * 抽象类”实例化：创建对象“：抽象类自身无法实现实例化
 * ①创建【N个】子类，继承抽象【父】类，子类不一定实现抽象【父】类的所有抽象方法
 * ②使用面向对象：多态【向上造型】    抽象类  引用=new【实现】子类()
 * 注意：抽象类一定发生重写，子类继承抽象【父】类，也可以叫做”实现类“
 */
abstract  class Animals{
    //抽象方法:没有具体的实现方法【代码块】---一定继承---一定多态性【造型】
    public abstract void say();
//    //①定义由final修饰的抽象方法吗   ×
//    public final abstract void sleep();
    //②定义抽象变量                  ×
//    abstract int i=1;
    //③定义静态变量                  √
    static int i=1;
    //④定义一个静态的抽象变量          ×
//    static abstract int j=1;
    //⑤定义静态的抽象方法【无实现】     ×
//    public static abstract void eat();
    //⑥定义静态的方法【无实现】        √
    public static  void eat(){};
    //⑤⑥总结：抽象方法|静态方法， 方法定义：修饰符  static|abstract返回值  方法
    //⑦可以定义内部类：静态内部类      √
    static class Sas{};
    //⑧抽象类有构造器吗？             √

    public Animals() {
    }
    //⑨抽象类普通实现方法？            √
    public void run(){}

}
//⑩抽象类可以继承抽象类吗           √
abstract class  boy extends Animals{
    public abstract void sleep();
}
//实现类：实现抽象【父】类的方法----多个实现类---继承---抽象
class Person1 extends Animals{
    public void say(){
        System.out.println("人---说话");
    }
}
public class 抽象类 {
    public static void main(String[] args) {
        //抽象类无法创建对象：提供抽象方法--必须由子类实现---多态【造型】
        Animals a=new Person1();
        a.say();//向上造型--重写抽象父类的抽象方法【覆盖】

        }
    }

